#!/bin/bash

export LANG=zh_CN.UTF-8

export LC_ALL=zh_CN.UTF-8

#SHADOWSOCKS_HOME is the location of the bin files of shadowsocks
export SHADOWSOCKS_HOME=/usr/share/{{shadowsocks_service_name}}

#SHADOWSOCKS_USAGE is the message if this script is called without any options
SHADOWSOCKS_USAGE="Usage: $0 {\e[00;32mstart\e[00m|\e[00;31mstop\e[00m|\e[00;32mstatus\e[00m|\e[00;31mrestart\e[00m}"

#SHUTDOWN_WAIT is wait time in seconds for java proccess to stop
SHUTDOWN_WAIT=20

shadowsocks_pid() {
        echo `ps -fe | grep $SHADOWSOCKS_HOME | grep -v grep | tr -s " "|cut -d" " -f2`
}

start() {
  pid=$(shadowsocks_pid)
  if [ -n "$pid" ]
  then
    echo -e "\e[00;31mShadowsocks is already running (pid: $pid)\e[00m"
  else
    # Start shadowsocks
    echo -e "\e[00;32mStarting shadowsocks\e[00m"
    sh $SHADOWSOCKS_HOME/start-multi-user-ssserver-script.sh
    status
  fi
  return 0
}

status(){
          pid=$(shadowsocks_pid)
          if [ -n "$pid" ]; then echo -e "\e[00;32mShadowsocks is running with pid: $pid\e[00m"
          else echo -e "\e[00;31mShadowsocks is not running\e[00m"
          fi
}

terminate() {
	echo -e "\e[00;31mTerminating Shadowsocks\e[00m"
	kill -9 $(shadowsocks_pid)
}

stop() {
  pid=$(shadowsocks_pid)
  if [ -n "$pid" ]
  then
    echo -e "\e[00;31mStoping Shadowsocks\e[00m"
    sh $SHADOWSOCKS_HOME/stop_ssserver.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\n\e[00;31mwaiting for processes to exit\e[00m";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\n\e[00;31mkilling processes which didn't stop after $SHUTDOWN_WAIT seconds\e[00m"
      terminate
    fi
  else
    echo -e "\e[00;31mShadowsocks is not running\e[00m"
  fi

  return 0
}

case $1 in

        start)
          start
        ;;

        stop)
          stop
        ;;

        restart)
          stop
          start
        ;;

        status)
                status

        ;;

        *)
                echo -e $SHADOWSOCKS_USAGE
        ;;
esac
exit 0
